package com.haojin.java;
/*
 * 
 * static关键字的使用
 * 
 * 1.static:静态的
 * 2.static可以用来修饰：属性，方法，代码块，内部类
 * 
 * 3.使用static修饰属性:静态变量，
 *          3.1属性：按是否使用static修饰，分为 静态属性 和 非静态属性（实例属性）
 *          实例属性：我们创建了类的多个对象，每个对象都独立拥有一套类中的非静态属性。
 *                   当修改其中一个对象的非静态属性时，不会导致其他对象中同样的属性值的修改
 *          静态属性：我们创建了类的多个对象，多个对象共享同一个静态变量，当某一个对象修改静态变量
 *                   会导致其他对象调用此静态变量时，是修改过的
 *          
 *          3.2 static修属性的其他说明：
 *              ①静态变量随着类的加载而加载，可以通过  类.静态变量  的方式进行调用
 *              ②静态变量的加载早于对象的创建
 *              ③由于类之会加载一次，则静态变量在内存中也只会存在一份，存在方法区的静态域中
 *              
 *             ④       类变量         实例变量
 *             类               yes        no
 *             对象           yes        yes
 * 
 *          3.3 静态属性举例： System.out  ;Math.PI
 * 4.使用static修饰方法：
 *         ①随着类的加载而加载，可以通过“类.静态方法”的方式进行调用
 *         ②           类变量         实例变量
 *             类               yes        no
 *             对象           yes        yes
 *         ③静态方法中，只能调用静态的方法或属性
 *          非静态方法中，及可以调用非静态的方法或属性，也可以调用静态的属性和方法
 *          
 *5.  static注意点：
 *          5.1在静态方法中，不能使用this关键字，super关键字
 *          5.2关于静态属性和静态方法，大家从生命周期的角度去理解
 *          
 *6. 开发中，如何确定一个属性是否要声明为static？
 *      >属性可以被对个对象共享的，不会随着对象的不同而不同的
 *      >类中的常量，也常声明为static
 *   
 *   开发中，如何确定一个方法是否要声明为static？
 *      >操作静态属性的方法，通常设置为静态的
 *      >工具类中的方法，习惯上声明为静态的。比如：Math，Arrays
 *
 *
 *
 * 
 */
public class StaticTest {

	public static void main(String[] args) {
		Chinese c1 = new Chinese();
		c1.name = "王权";
		c1.age = 29;
		c1.nation = "CHN";
		
		Chinese c2 = new Chinese();
		c2.name = "老李";
		c2.age = 68;
		c2.nation = "China";
		Chinese.nation = "China a";//用类来调用静态方法
		
		System.out.println(c2.nation);
	}
}

class Chinese{
	String name;
	int age;
	static String nation;
	
	
	
}